---
title: 上下文管理
description: Learn how to provide local data via RunContext and expose context to the LLM
---

import { Aside, Code } from '@astrojs/starlight/components';
import localContextExample from '../../../../../../examples/docs/context/localContext.ts?raw';

“Context” 是一个含义很广的术语。你可能关心的上下文主要有两类：

1. 你的代码在一次运行期间可以访问的**本地上下文**：工具所需的依赖或数据、如 `onHandoff` 的回调，以及生命周期钩子。
2. 语言模型在生成响应时可见的**智能体/LLM 上下文**。

## 本地上下文

本地上下文由 `RunContext<T>` 类型表示。你可以创建任意对象来保存状态或依赖，并将它传递给 `Runner.run()`。所有工具调用和钩子都会接收一个 `RunContext` 包装器，以便读取或修改该对象。

<Code lang="typescript" code={localContextExample} title="本地上下文示例" />

参与同一次运行的每个智能体、工具和钩子都必须使用相同**类型**的上下文。

将本地上下文用于以下场景：

- 有关本次运行的数据（用户名、ID 等）
- 依赖项，例如日志记录器或数据获取器
- 帮助函数

<Aside type="note">
  该上下文对象**不会**发送给 LLM。它仅在本地使用，你可以自由读取或写入。
</Aside>

## 智能体/LLM 上下文

当调用 LLM 时，它唯一可见的数据来自对话历史。要提供额外信息，你可以：

1. 将信息添加到智能体的 `instructions`——也称为系统或开发者消息。它可以是静态字符串，或接收上下文并返回字符串的函数。
2. 在调用 `Runner.run()` 时，将其包含在 `input` 中。这与 instructions 的方式类似，但允许你将消息放在[指令链](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command)中更靠后的位置。
3. 通过函数工具暴露信息，让 LLM 按需获取数据。
4. 使用检索或 Web 搜索工具，使响应以来自文件、数据库或 Web 的相关数据为依据。
